package com.jwater.core.common.param;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * @description: 包装map，提供更加通用的方法获取map中的数据
 * @author: jnner
 * @createDate: 2021/2/5
 * @version: 1.0
 */
public interface ParamMap extends Serializable {
    /**
     * 存放数据
     *
     * @param key
     * @param value
     */
    public void put(String key, Object value);

    /**
     * 获取数据
     *
     * @param key
     * @return
     */
    public Object getObject(String key);

    /**
     * 获取map中的ParamMap
     *
     * @param key
     * @return
     */
    public ParamMap getParamMap(String key);

    /**
     * 获取map中的ParamMap集合
     *
     * @param key
     * @return
     */
    public List<ParamMap> getParamMaps(String key);

    /**
     * map的entrySet结果
     *
     * @return
     */
    public Set<Entry<String, Object>> entrySet();

    /**
     * 是否包含key
     *
     * @param key
     * @return
     */
    public boolean containsKey(String key);

    /**
     * 获取字符串类型
     *
     * @param key
     * @return
     */
    public String getString(String key);

    /**
     * 获取字符串类型
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public String getString(String key, String defaultValue);

    /**
     * 获取long数据
     *
     * @param key
     * @return
     */
    public Long getLong(String key);

    /**
     * 获取long数据
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public Long getLong(String key, Long defaultValue);

    /**
     * 获取int数据
     *
     * @param key
     * @return
     */
    public Integer getInt(String key);

    /**
     * 获取int数据
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public Integer getInt(String key, Integer defaultValue);

    /**
     * 获取double数据
     *
     * @param key
     * @return
     */
    public Double getDouble(String key);

    /**
     * 获取double数据
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public Double getDouble(String key, Double defaultValue);

    /**
     * 获取float数据
     *
     * @param key
     * @return
     */
    public Float getFloat(String key);

    /**
     * 获取float数据
     *
     * @param key
     * @param defaultValue
     * @return
     */
    public Float getFloat(String key, Float defaultValue);

    /**
     * 获取map
     *
     * @return
     */
    public Map<String, Object> getParams();

    /**
     * 转化为json
     *
     * @return
     */
    public String toJson();

    /**
     * 转化为对象
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public <T> T toObj(Class<T> clazz);

    /**
     * 根据key的前缀获取数据
     *
     * @param prefix
     * @return
     */
    public ParamMap getByPrefix(String prefix);

    /**
     * 根据key的前缀获取数据
     *
     * @param prefix
     * @param replace
     * @return
     */
    public ParamMap getByPrefix(String prefix, boolean replace);

    /**
     * 合并数据
     *
     * @return
     */
    public String join();

    /**
     * 合并数据
     *
     * @param splitStr
     * @return
     */
    public String join(String splitStr);
}
